package com.viqiang.mybatis.mapper;



import com.viqiang.mybatis.pojo.User;
import org.apache.ibatis.annotations.MapKey;

import java.util.List;
import java.util.Map;

/**
 * #{}是预编译处理，${}是字符串替换。
 * Mybatis 在处理#{}时，会将 sql 中的#{}替换为?号，调用 PreparedStatement 的set 方法来赋值。
 * Mybatis 在处理$ {}时，就是把${}替换成变量的值。
 * 使用#{}可以有效的防止 SQL 注入，提高系统安全性。
 *
 *
 */
public interface UserMapper {
    // #{}和${}的区别
    List<User> getOrderBy(String order);


    // pojo
    int updatePojo(User user);


    // 多个参数

    /**
     *
     * @param name
     * @param pwd
     * @return
     */
    User getParams(String name, String pwd);

    // 单个参数
    User getOneParam(int id);

    // 返回Map集合, key -> 列名、value -> 列值
    Map<String, Object> getMapColumnToValue(int id);

    // 返回Map集合, key -> 主键值、value -> 对应的实体对象
    @MapKey("id") // 告诉MyBatis封装Map的时候使用实体类的哪个属性作为map的key
    Map<Integer, User> getMapPrimayToEntity();

    List<User> getAll();

    // 保存
    int save(User user);

    // 根据id查询
    User get(int id);

    // 修改
    int update(User user);

    // 删除
    boolean delete(int id);
}
